#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
调试条码编号计算公式
"""

from barcode_generator import find_valid_15bit_number, verify_15bit_condition
from barcode_decoder import decode_barcode

def test_different_formulas():
    """测试不同的计算公式"""
    
    # 已知的正确数据：项目80，批次3 -> 条码 110010011010101011001
    target_project = 80
    target_batch = 3
    target_barcode = "110010011010101011001"
    
    print(f"目标：项目{target_project}，批次{target_batch}")
    print(f"目标条码：{target_barcode}")
    
    # 解析目标条码得到条码编号
    result = decode_barcode(target_barcode, verbose=False)
    if result:
        decoded_project, decoded_batch = result
        print(f"当前解析结果：项目{decoded_project}，批次{decoded_batch}")
    
    # 反向计算：从条码字符串得到15位数和条码编号
    from barcode_decoder import decode_barcode_to_encoded, decode_encoded_to_binary, binary_to_number, find_barcode_number_by_15bit
    
    encoded_str = decode_barcode_to_encoded(target_barcode)
    binary_str = decode_encoded_to_binary(encoded_str)
    number = binary_to_number(binary_str)
    barcode_number = find_barcode_number_by_15bit(number)
    
    print(f"目标条码对应的条码编号：{barcode_number}")
    print(f"目标条码对应的15位数：{number}")
    
    # 测试不同的公式
    formulas = [
        ("项目编号 + (批次-1) * 80", lambda p, b: p + (b-1) * 80),
        ("批次 + (项目编号-1) * 60", lambda p, b: b + (p-1) * 60),
        ("(项目编号-1) + (批次-1) * 80", lambda p, b: (p-1) + (b-1) * 80),
        ("(批次-1) + (项目编号-1) * 60", lambda p, b: (b-1) + (p-1) * 60),
        ("项目编号 * 批次", lambda p, b: p * b),
        ("(项目编号-1) * 60 + 批次", lambda p, b: (p-1) * 60 + b),
        ("(批次-1) * 80 + 项目编号", lambda p, b: (b-1) * 80 + p),
    ]
    
    print(f"\n测试不同公式计算项目{target_project}批次{target_batch}的条码编号：")
    for desc, formula in formulas:
        calculated = formula(target_project, target_batch)
        print(f"{desc:30} = {calculated:4d} {'✓' if calculated == barcode_number else '✗'}")
    
    # 如果没有匹配的公式，尝试反向推导
    if barcode_number:
        print(f"\n反向推导公式（目标条码编号：{barcode_number}）：")
        
        # 尝试各种可能的关系
        possible_relations = []
        
        # 检查是否是简单的线性关系
        for a in range(1, 100):
            for b in range(1, 100):
                if a * target_project + b * target_batch == barcode_number:
                    possible_relations.append(f"{a} * 项目编号 + {b} * 批次 = {a} * {target_project} + {b} * {target_batch} = {barcode_number}")
                if a * target_batch + b * target_project == barcode_number:
                    possible_relations.append(f"{a} * 批次 + {b} * 项目编号 = {a} * {target_batch} + {b} * {target_project} = {barcode_number}")
        
        if possible_relations:
            print("可能的线性关系：")
            for rel in possible_relations[:5]:  # 只显示前5个
                print(f"  {rel}")
        else:
            print("未找到简单的线性关系")

def test_multiple_known_cases():
    """如果有多个已知案例，可以用来验证公式"""
    print("\n=== 需要更多测试数据 ===")
    print("请提供更多的项目编号、批次和对应的条码，例如：")
    print("项目1，批次1 -> 条码是什么？")
    print("项目1，批次2 -> 条码是什么？")
    print("项目2，批次1 -> 条码是什么？")
    print("这样可以帮助确定正确的计算公式")

if __name__ == "__main__":
    test_different_formulas()
    test_multiple_known_cases()
